﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Maestro_Proveedores.Forms
{
    public partial class ConsultarDevoluciones : Form
    {

        /// <summary>
        /// Identificador del formulario, esta variable utilizada para controlar el acceso al formulario y para realizar la auditoria
        /// </summary>
        public static string TIPO = "081";
        /// <summary>
        /// Este registro tiene los permisos que tiene usuario que inicio sesion sobre el presente formulario (lectura, escritura, etc..)
        /// </summary>
        private Auditoria.CORPORATIVADataSet.SEG_PERMISOSRow seg_PERMRow = null;
        /// <summary>
        /// Este formulario se utiliza para revisar las devoluciones que se le realizan a los proveedores de la corporación, permitiendo discriminar aquellas a aquellas a las que se les definio un codigo de causal de las que no se les definio.
        /// </summary>
        public ConsultarDevoluciones()
        {
            InitializeComponent();
            this.mAPICSdATAsET = new MAPICS.MAPICSDataSet();
            this.iNF_VR_NOTableAdapter = new MAPICS.MAPICSDataSetTableAdapters.INF_VR_NOTableAdapter();
            this.iNF_VR_SITableAdapter = new MAPICS.MAPICSDataSetTableAdapters.INF_VR_SITableAdapter();
            this.iNF_OCTableAdapter = new MAPICS.MAPICSDataSetTableAdapters.INF_OCTableAdapter();
        }
        /// <summary>
        /// Objeto que hace posible la recuperación de información desde INFOR XA.
        /// </summary>
        private MAPICS.MAPICSDataSet mAPICSdATAsET = null;
        private MAPICS.MAPICSDataSetTableAdapters.INF_VR_SITableAdapter iNF_VR_SITableAdapter = null;
        private MAPICS.MAPICSDataSetTableAdapters.INF_VR_NOTableAdapter iNF_VR_NOTableAdapter = null;
        private MAPICS.MAPICSDataSetTableAdapters.INF_OCTableAdapter iNF_OCTableAdapter = null;
        /// <summary>
        /// Esta variable es utilizada para almacenar los registros de las VR's que van a mostrar en el datagrid
        /// </summary>
        private DataTable INF_VR_SIDataTable = null;
        /// <summary>
        /// Esta variable es utilizada para almacenar los registros de las VR's que van a mostrar en el datagrid
        /// </summary>
        private DataTable INF_VR_NODataTable = null;
        
        private void ConsultarDevoluciones_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'cORPORATIVADataSet.PRV_ENTREGAIMPERFECTA_MOTIVO' Puede moverla o quitarla según sea necesario.
            this.pRV_ENTREGAIMPERFECTA_MOTIVOTableAdapter.Fill(this.cORPORATIVADataSet.PRV_ENTREGAIMPERFECTA_MOTIVO);
            // TODO: esta línea de código carga datos en la tabla 'cORPORATIVADataSet.PRV_DEVOLUCION' Puede moverla o quitarla según sea necesario.
            this.pRV_DEVOLUCIONTableAdapter.FillConCausal(this.cORPORATIVADataSet.PRV_DEVOLUCION);
            //--- auditoria
            if (ConfiguracionDelSistema.auditar)
            {
                Session.SEG_PERMISOSTableAdapter.FillByTipoGrupo(Session.AUDITORIADataSet.SEG_PERMISOS, TIPO + Session.Seg_USUARRow.CODGRU);
                this.seg_PERMRow = Session.AUDITORIADataSet.SEG_PERMISOS[0];
            }
        }

        private void UpdatePictureBox_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            this.ActualizarDesdeINFOR();
            this.pRV_DEVOLUCIONTableAdapter.FillConCausal(this.cORPORATIVADataSet.PRV_DEVOLUCION);
            Cursor.Current = Cursors.Default;
        }

        private void UpdatePictureBox_Click2(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            this.pRV_DEVOLUCIONTableAdapter.Fill(this.cORPORATIVADataSet.PRV_DEVOLUCION);
            string prv = "";
            int i = 0;
            foreach (_Maestro_Proveedores_CORPORATIVADataSet.PRV_DEVOLUCIONRow row in this.cORPORATIVADataSet.PRV_DEVOLUCION) 
            {
                if (this.iNF_OCTableAdapter.FillByCod_OC(this.mAPICSdATAsET.INF_OC, row.orden_compra) > 0)
                {
                    prv = MAESTROS.ClassVarios.LimpiarCadena(this.mAPICSdATAsET.INF_OC[0].COD_PRV);
                    if (this.pRV_DEVOLUCIONTableAdapter.Update_idProveedor(prv, row.orden_compra) == 0)
                        MessageBox.Show("error " + row.orden_compra);
                    else
                        i++;
                }                   
            }
            MessageBox.Show("actualizados: "+i);

            Cursor.Current = Cursors.Default;
        }

        private void ActualizarDesdeINFOR()
        {
            string almacen = "";
            string motivo = "";
            string id_proveedor = "";
            DateTime fecha_minima = DateTime.Now;

            try
            {
                //--- consigo la fecha en la que se registro la ultima VR, solo se traeran desde MAPICS las VR con fecha de creacion posterior a esta fecha.
                fecha_minima = DateTime.Parse(this.pRV_DEVOLUCIONTableAdapter.Scalar_Max_fecha().ToString());
            }
            catch (Exception) 
            {
                //-- si se presenta un error, es por que en la tabla PRV_DEVOLUCIONES no existen registros, en este caso la fecha minima sera: 1 de sepiembre del 2010,
                //-- en este fecha fue que se empezaron a implementar los codigos de causales.
                fecha_minima = DateTime.Parse("1/9/2010");
            }

            //--- las siguientes consultas son demoradas, solo por esta razon las realizo en este punto.
            this.iNF_VR_SITableAdapter.FillByFechas(this.mAPICSdATAsET.INF_VR_SI, fecha_minima, DateTime.Now.AddHours(1));
            this.iNF_VR_NOTableAdapter.FillByFechas(this.mAPICSdATAsET.INF_VR_NO, fecha_minima, DateTime.Now.AddHours(1));
            
            //--verifico aquellas devoluciones a las que se les definio el causal...
            foreach (MAPICS.MAPICSDataSet.INF_VR_SIRow row in this.mAPICSdATAsET.INF_VR_SI)
            {
                almacen = "";
                motivo = "";
                id_proveedor = "";
            
                if (!row.COMENTARIO.Trim().Equals("VR PILOTO"))
                {

                    if (row.ALMACEN.Trim().Equals("001"))
                        almacen = "Mamonal";
                    else if (row.ALMACEN.Trim().Equals("002"))
                        almacen = "Boca Grande";
                    else
                        almacen = row.ALMACEN.Trim();

                    if (row.IsCOMENTARIONull())
                        motivo = "";
                    else
                        motivo = MAESTROS.ClassVarios.LimpiarCadena(row.COMENTARIO);
                    //--- le agrego el id del proveedor.
                    if (this.iNF_OCTableAdapter.FillByCod_OC(this.mAPICSdATAsET.INF_OC, row.COD_OC) > 0)
                        id_proveedor = MAESTROS.ClassVarios.LimpiarCadena(this.mAPICSdATAsET.INF_OC[0].COD_PRV);
                    //--- con la siguiente sentencia verificoq ue el codigo este registrado en la base de datos, en caso de que no este, lo dejo vacion para que el administrador lo asigne de forma manual.
                    if (this.pRV_ENTREGAIMPERFECTA_MOTIVOTableAdapter.Scalar_isCodigoValido(Enums.EntregasImperfectas.Devolución.ToString(), motivo) == 0)
                        motivo = "";
                    
                    try
                    {
                        this.pRV_DEVOLUCIONTableAdapter.Insert
                            (
                            MAESTROS.ClassVarios.LimpiarCadena(row.USUARIO) + row.HORA.Year + "" + row.HORA.Month + "" + row.HORA.Day + "" + row.HORA.Hour + "" + row.HORA.Minute + "" + row.HORA.Second + "" + row.HORA.Millisecond,
                            row.USUARIO.Trim(),
                            row.COD_OC,
                            row.COD_ITEM,
                            row.CAN_DEV,
                            motivo,
                            almacen,
                            row.HORA,
                            row.NUM_ITEM,
                            id_proveedor
                            );
                    }
                    catch (Exception) { }
                }
            }

            //--verifico aquellas devoluciones a las que NO se les definio el causal...
            foreach (MAPICS.MAPICSDataSet.INF_VR_NORow row in this.mAPICSdATAsET.INF_VR_NO)
            {
                almacen = "";
                motivo = "";
                id_proveedor = "";
            
                if (row.ALMACEN.Trim().Equals("001"))
                    almacen = "Mamonal";
                else if (row.ALMACEN.Trim().Equals("002"))
                    almacen = "Boca Grande";
                else
                    almacen = row.ALMACEN.Trim();

                if (row.IsCOMENTARIONull())
                    motivo = "";
                else
                    motivo = "";
                //-- le agrego el id del proveedor.
                if (this.iNF_OCTableAdapter.FillByCod_OC(this.mAPICSdATAsET.INF_OC, row.COD_OC) > 0)
                    id_proveedor = MAESTROS.ClassVarios.LimpiarCadena(this.mAPICSdATAsET.INF_OC[0].COD_PRV);
                
                try
                {
                    this.pRV_DEVOLUCIONTableAdapter.Insert
                        (
                        MAESTROS.ClassVarios.LimpiarCadena(row.USUARIO) + row.HORA.Year + "" + row.HORA.Month + "" + row.HORA.Day + "" + row.HORA.Hour + "" + row.HORA.Minute + "" + row.HORA.Second + "" + row.HORA.Millisecond,
                        row.USUARIO.Trim(),
                        row.COD_OC,
                        row.COD_ITEM,
                        row.CAN_DEV,
                        motivo,
                        almacen,
                        row.HORA,
                        row.NUM_ITEM,
                        id_proveedor
                        );
                }
                catch (Exception) { }
            }            
        }

        private void DataError(object sender, DataGridViewDataErrorEventArgs e)
        {

        }

        private void helpPictureBox_Click(object sender, EventArgs e)
        {
            Help.ShowHelp(this, ConfiguracionDelSistema.manualDeUsuario, HelpNavigator.TableOfContents);
        }

        private void reportToolStripButton_Click(object sender, EventArgs e)
        {
            //this.reporte_DevolucionesTableAdapter.Fill(this.cORPORATIVADataSet.Reporte_Devoluciones);
            //((FormReport_Devoluciones)herramientas.Redirect.getFormulario("FormReport_Devoluciones")).mostrarReporte(this.cORPORATIVADataSet);
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            Exportacion.Exportacion.exportar(Exportacion.Exportacion.EnumTipoFormatosExportar.XLS, this.pRV_DEVOLUCIONConCausalDataGridView, "Devoluciones", false);
        }

        private void comoSeHaceLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start(ConfiguracionDelSistema.directorioVideoTutoriales + "consultarDevoluciones.wmv");
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
            }
        }
    }
}
